home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / asm / TBSource.lha / RingDetect / RD.S < prev   
Text File  |  1993-07-21  |  32KB  |  1,648 lines

  1. *************************************************
  2. *                        *
  3. *        (C)opyright 1991-92        *
  4. *                        *
  5. *         by Tomi Blinnikka        *
  6. *                        *
  7. *    Don't try to understand the code    *
  8. *                        *
  9. * Version 0.01    30/12/1991            *
  10. *     -0.99ö                    *
  11. *                        *
  12. * Version 1.00    01/01/1992            *
  13. *                        *
  14. * BUGS:    Wrong year, debugging stuff left in    *
  15. *    in prog.                *
  16. *                        *
  17. * Version 1.01    01/01/1992            *
  18. *                        *
  19. * BUGS:    GetLength made an enforcer hit        *
  20. *    with illegal pointer. Fixed.        *
  21. *    Load bug (atleast partly) fixed.    *
  22. *                        *
  23. * Version 1.02    13/01/1992            *
  24. *                        *
  25. * BUGS:    Didn't work with all modems        *
  26. *                        *
  27. * Version 1.03    15/03/1992            *
  28. *                        *
  29. * BUGS:    All version up to here didn't get RING    *
  30. *    properly.                *
  31. *                        *
  32. * Version 1.04    31/05/1992            *
  33. *                        *
  34. * BUGS:    Version string not according to     *
  35. *    style guide. Might have had debugging    *
  36. *    stuff left in again. Couldn't have a    *
  37. *    comment after name and options.        *
  38. *                        *
  39. * Version 1.05    07/06/1992            *
  40. *                        *
  41. * BUGS:                        *
  42. *                        *
  43. * Version 1.06    09/06/1992            *
  44. *                        *
  45. * Added ",13," back. Added RingCounter.        *
  46. *                        *
  47. * BUGS:    Serial unit was comming out incorrect    *
  48. *    if it was other than 0.            *
  49. *                        *
  50. * Version 1.07    09/08/1992            *
  51. *                        *
  52. * Version 1.08    30/12/1992            *
  53. *                        *
  54. * Changed parser.                *
  55. *                        *
  56. * Updated getting IOReq and message port to    *
  57. * KS 2.04 exec routines (from amiga.lib)    *
  58. *                        *
  59. * BUGS:                        *
  60. *                        *
  61. * Version 1.09    31/12/1992 (rel. 1.1.93)    *
  62. *                        *
  63. * Added init string.                *
  64. *                        *
  65. * BUGS:                        *
  66. *                        *
  67. * Version 1.10    10/01/1993            *
  68. *                        *
  69. * Cleaned _SysBase&_DOSBase out, fixed         *
  70. * NoSerialText1.                *
  71. *                        *
  72. * BUGS:    Had wrong lib calls in ClearMsgs    *
  73. *                        *
  74. * Version 1.11    07/02/1993            *
  75. *                        *
  76. * BUGS:                        *
  77. *                        *
  78. * Version 1.12    20/07/1993            *
  79. *                        *
  80. * BUGS:                        *
  81. *                        *
  82. * Made a little bit safer to use.        *
  83. * Fixed some GadTools stuff.            *
  84. *                        *
  85. *************************************************
  86.  
  87.     INCLUDE    "JMPLibs.i"
  88.     INCLUDE    "exec/types.i"
  89.     INCLUDE    "exec/nodes.i"
  90.     INCLUDE    "exec/lists.i"
  91.     INCLUDE    "exec/ports.i"
  92.     INCLUDE    "exec/memory.i"
  93.     INCLUDE    "exec/devices.i"
  94.     INCLUDE    "exec/io.i"
  95.     INCLUDE    "exec/tasks.i"
  96.     INCLUDE    "libraries/dosextens.i"
  97.     INCLUDE    "libraries/dos.i"
  98.     INCLUDE    "devices/serial.i"
  99.     INCLUDE    "libraries/gadtools.i"
  100.     INCLUDE "workbench/startup.i"
  101.  
  102.     INCLUDE    "XREF:2.0.xref"
  103.     INCLUDE    "XREF:intuition.xref"
  104.     INCLUDE    "XREF:exec.xref"
  105.     INCLUDE    "XREF:dos.xref"
  106.     INCLUDE    "XREF:icon.xref"
  107.  
  108. RingTop:    EQU    2
  109. OptionTop:    EQU    56
  110.  
  111. TRUE:        EQU    1
  112.  
  113. PROGVERSION:    macro
  114.         dc.b    "1.12 (20.07.93)"
  115.         endm
  116.  
  117.         section    RD,CODE
  118.  
  119.         push    d2-d7/a2-a6
  120.  
  121.         sub.l    a1,a1            ;Find our task
  122.         lib    Exec,FindTask
  123.         move.l    d0,OurTask
  124.         move.l    d0,a4
  125.         move.l    pr_CLI(a4),d0
  126.         bne    OpenDos
  127.  
  128.         lea.l    pr_MsgPort(a4),a0
  129.         lib    Exec,WaitPort
  130.         lea.l    pr_MsgPort(a4),a0
  131.         lib    Exec,GetMsg
  132.         move.l    d0,WBMsg
  133.  
  134. OpenDos:    openlib    Dos,NoDos        ;Keep at beginning
  135.         openlib    Utility,NoUtility
  136.  
  137.         tst.l    WBMsg
  138.         beq    CLIStart
  139.  
  140.         lea.l    NILName,a0
  141.         move.l    a0,d1
  142.         move.l    #MODE_NEWFILE,d2
  143.         lib    Dos,Open
  144.         move.l    d0,NILFile
  145.         beq    ShutDown
  146.         move.l    NILFile,_stdout
  147.         beq    NoNIL
  148.  
  149.         openlib    Icon,NoIcon
  150.  
  151.         move.l    WBMsg,a0
  152.         move.l    sm_ArgList(a0),a1
  153.         move.l    wa_Lock(a1),d1
  154.         lib    Dos,CurrentDir
  155.         move.l    d0,OldLock
  156.  
  157.         move.l    WBMsg,a0
  158.         move.l    sm_ArgList(a0),a1
  159.         move.l    wa_Name(a1),a0
  160.         lib    Icon,GetDiskObject
  161.         move.l    d0,DiskObject
  162.         beq    MainStart
  163.  
  164.         move.l    DiskObject,a4
  165.         move.l    $36(a4),a0        ;do_ToolTypes
  166.         lea.l    DEVICEText1,a1
  167.         lib    Icon,FindToolType
  168.         tst.l    d0
  169.         beq    DoToolType1
  170.         move.l    d0,SerName
  171.  
  172. DoToolType1:    move.l    $36(a4),a0        ;do_ToolTypes
  173.         lea.l    UNITText1,a1
  174.         lib    Icon,FindToolType
  175.         tst.l    d0
  176.         beq    DoToolType2
  177.         move.l    d0,a0
  178.         bsr    ConvASCII
  179.         tst.l    d0
  180.         beq    DoToolType2
  181.         move.l    d0,SerUnit
  182.  
  183. DoToolType2:    move.l    $36(a4),a0        ;do_ToolTypes
  184.         lea.l    SPEEDText1,a1
  185.         lib    Icon,FindToolType
  186.         tst.l    d0
  187.         beq    DoToolType3
  188.         move.l    d0,a0
  189.         bsr    ConvASCII
  190.         tst.l    d0
  191.         beq    DoToolType3
  192.         move.l    d0,Speed
  193.  
  194. DoToolType3:    move.l    $36(a4),a0        ;do_ToolTypes
  195.         lea.l    ICONIFYText1,a1
  196.         lib    Icon,FindToolType
  197.         tst.l    d0
  198.         beq    DoToolType4
  199.         move.l    d0,a0
  200.         lea.l    YESText1,a1
  201.         lib    Icon,MatchToolValue
  202.         tst.l    d0
  203.         beq    DoToolType4
  204.         move.l    #1,Iconify
  205.  
  206. DoToolType4:
  207.         bra    MainStart
  208.  
  209. CLIStart:    lib    Dos,Output
  210.         move.l    d0,_stdout
  211.  
  212.         lea.l    CLTemplate1,a0
  213.         move.l    a0,d1
  214.         lea.l    CLArray1,a0
  215.         move.l    a0,d2
  216.         clr.l    d3
  217.         lib    Dos,ReadArgs
  218.         move.l    d0,RDArgs1
  219.         beq    NoRDArgs
  220.  
  221.         tst.l    UnitPointer
  222.         beq    DoParsing1
  223.         move.l    UnitPointer,a0
  224.         move.l    (a0),SerUnit
  225. DoParsing1:    tst.l    SpeedPointer
  226.         beq    DoParsing2
  227.         move.l    SpeedPointer,a0
  228.         move.l    (a0),Speed
  229. DoParsing2:
  230.  
  231. MainStart:    openlib    Intuition,NoInt
  232.         openlib    GadTools,NoGadTools
  233.  
  234. ;Create reply port for serial.device (or modem0.device etc.)
  235.  
  236.         lib    Exec,CreateMsgPort
  237.         move.l    d0,SRPort
  238.         beq    NoMsgPort
  239.  
  240. ;Create IOReq for serial.device (or for other device, but size is EXTSER)
  241.  
  242.         move.l    #IOEXTSER_SIZE,d0
  243.         move.l    SRPort,a0
  244.         clr.b    LN_TYPE(a0)        ;Make sure CheckIO doesn't hang
  245.         lib    Exec,CreateIORequest
  246.         move.l    d0,IORequest
  247.         beq    NoIOReq
  248.  
  249. ;open serial.device
  250.  
  251.         move.l    SerName,a0
  252.         move.l    SerUnit,d0
  253.         move.l    IORequest,a1
  254.         move.b    #SERF_SHARED,IO_SERFLAGS(a1)
  255.         clr.l    d1                ;no flags
  256.         lib    Exec,OpenDevice
  257.         tst.l    d0
  258.         bne    NoSerial
  259.         move.w    #$1,SerOpen        ;just to tell if open
  260.  
  261.         tst.l    Speed
  262.         beq    SkipSetParams
  263.         move.l    IORequest,a1
  264.         clr.l    IO_LENGTH(a1)
  265.         clr.l    IO_DATA(a1)
  266.         move.w    #SDCMD_SETPARAMS,IO_COMMAND(a1)
  267.         move.l    Speed,IO_BAUD(a1)
  268.         lib    Exec,DoIO
  269.         tst.l    d0
  270.         beq    SkipSetParams
  271.         bsr    NoSetSer
  272.  
  273. SkipSetParams:
  274.  
  275.         bsr    LockPubScr
  276.         tst.l    PubScreen
  277.         beq    NoPubScreen
  278.  
  279. ;Get visualinfo
  280.  
  281.         move.l    PubScreen,a0
  282.         sub.l    a1,a1
  283.         lib    GadTools,GetVisualInfoA
  284.         move.l    d0,vi
  285.  
  286. ;Make gadget stuff
  287.  
  288.         lea.l    glist,a0
  289.         lib    GadTools,CreateContext
  290.         move.l    d0,ContextGad
  291.         beq    NoContextGad
  292.  
  293.         move.l    glist,a0
  294.         lea.l    NGOnOffGad1,a1
  295.         move.l    #CHECKBOX_KIND,d0
  296.         move.l    vi,gng_VisualInfo(a1)
  297.         lea.l    GadTagList,a2
  298.         lib    GadTools,CreateGadgetA
  299.  
  300.         move.l    d0,OnOffGad1
  301.         move.l    d0,a0
  302.         or.w    #RELVERIFY,gg_Activation(a0)
  303.         add.w    d5,gg_TopEdge(a0)
  304.  
  305.         lea.l    NGSTFGad1,a1
  306.         move.l    #CHECKBOX_KIND,d0
  307.         move.l    vi,gng_VisualInfo(a1)
  308.         lea.l    GadTagList,a2
  309.         lib    GadTools,CreateGadgetA
  310.  
  311.         move.l    d0,STFGad1
  312.         move.l    d0,a0
  313.         or.w    #RELVERIFY,gg_Activation(a0)
  314.         add.w    d5,gg_TopEdge(a0)
  315.  
  316.         lea.l    NGDBGad1,a1
  317.         move.l    #CHECKBOX_KIND,d0
  318.         move.l    vi,gng_VisualInfo(a1)
  319.         lea.l    GadTagList,a2
  320.         lib    GadTools,CreateGadgetA
  321.  
  322.         move.l    d0,DBGad1
  323.         move.l    d0,a0
  324.         or.w    #RELVERIFY,gg_Activation(a0)
  325.         add.w    d5,gg_TopEdge(a0)
  326.  
  327.         lea.l    NGSaveGad,a1
  328.         move.l    #BUTTON_KIND,d0
  329.         move.l    vi,gng_VisualInfo(a1)
  330.         lea.l    GadTagList,a2
  331.         lib    GadTools,CreateGadgetA
  332.  
  333.         move.l    d0,a0
  334.         move.l    a0,SaveGad1
  335.         or.w    #RELVERIFY,gg_Activation(a0)
  336.         add.w    d5,gg_TopEdge(a0)
  337.  
  338.         lea.l    NGQuitGad,a1
  339.         move.l    #BUTTON_KIND,d0
  340.         move.l    vi,gng_VisualInfo(a1)
  341.         lea.l    GadTagList,a2
  342.         lib    GadTools,CreateGadgetA
  343.  
  344.         move.l    d0,a0
  345.         move.l    a0,QuitGad1
  346.         or.w    #GRELRIGHT,gg_Flags(a0)
  347.         add.w    d5,gg_TopEdge(a0)
  348.  
  349.         lea.l    NGCmdGad1,a1
  350.         move.l    #CHECKBOX_KIND,d0
  351.         move.l    vi,gng_VisualInfo(a1)
  352.         lea.l    GadTagList,a2
  353.         lib    GadTools,CreateGadgetA
  354.  
  355.         move.l    d0,CmdGad1
  356.         move.l    d0,a0
  357.         add.w    d5,gg_TopEdge(a0)
  358.  
  359.         lea.l    NGStartGad1,a1
  360.         move.l    #STRING_KIND,d0
  361.         move.l    vi,gng_VisualInfo(a1)
  362.         lea.l    StartGadTagList,a2
  363.         lib    GadTools,CreateGadgetA
  364.  
  365.         move.l    d0,StartStrGad1
  366.         move.l    d0,a0
  367.         move.l    $22(a0),a1
  368.         move.l    (a1),StartStrGadBuf1
  369.         or.w    #GADGIMMEDIATE!RELVERIFY,gg_Activation(a0)
  370.         add.w    d5,gg_TopEdge(a0)
  371.  
  372.         lea.l    NGCmdStrGad1,a1
  373.         move.l    #STRING_KIND,d0
  374.         move.l    vi,gng_VisualInfo(a1)
  375.         lea.l    CmdStrGadTagList,a2
  376.         lib    GadTools,CreateGadgetA
  377.  
  378.         move.l    d0,CmdStrGad1
  379.         move.l    d0,a0
  380.         move.l    $22(a0),a1
  381.         move.l    (a1),CmdStrGadBuf1
  382.         or.w    #GADGIMMEDIATE!RELVERIFY,gg_Activation(a0)
  383.         add.w    d5,gg_TopEdge(a0)
  384.  
  385.         move.b    #1,GadMagic        ;Make worked OK
  386.  
  387. ;New style menu stuff
  388.  
  389.         lea.l    MNProjectMenu1,a0
  390.         lea.l    MenuTagList,a1
  391.         lib    GadTools,CreateMenusA
  392.         move.l    d0,mlist
  393.         beq    NoMenus
  394.  
  395.         move.l    mlist,a0
  396.         move.l    vi,a1
  397.         lea.l    MenuTagList,a2
  398.         lib    GadTools,LayoutMenusA
  399.         move.b    #1,MenuMagic
  400.  
  401. ;Read preferences
  402.  
  403.         bsr    Load
  404.  
  405. ;Set up first read request
  406.  
  407.         bsr    ResetSer
  408.         bsr    Reader
  409.  
  410. ;Open the window
  411.  
  412.         bsr    OpenWin1
  413.         tst.l    Window1
  414.         beq    NoWindow1
  415.  
  416. ;Unlock PubScreen
  417.  
  418.         sub.l    a0,a0
  419.         move.l    PubScreen,a1
  420.         lib    Intuition,UnlockPubScreen
  421.         clr.l    PubScreen
  422.  
  423. Window1IDCMP:    move.l    Window1,a0
  424.         bsr    CheckIDCMP
  425.         tst.l    d0
  426.         beq    Ring
  427.         cmp.l    #CLOSEWINDOW,d2
  428.         beq    ShutDown
  429.         cmp.l    #GADGETUP,d2
  430.         beq    DoGads
  431.         cmp.l    #MENUPICK,d2
  432.         beq    Win1Menus
  433.         cmp.l    #VANILLAKEY,d2
  434.         beq    VanillaKeys
  435.         bra    Window1IDCMP
  436.  
  437. Win1Menus:    bsr    MenuNull
  438.         cmp.w    #$00,d6
  439.         beq    Win1Menus1
  440.         cmp.w    #$01,d6
  441.         beq    Win1Menus2
  442.         bra    Window1IDCMP
  443. Win1Menus1:    cmp.w    #$00,d5
  444.         beq    DoLoad
  445.         cmp.w    #$01,d5
  446.         beq    Save
  447.         cmp.w    #$02,d5
  448.         beq    About
  449.         cmp.w    #$04,d5
  450.         beq    ShutDown
  451.         bra    Window1IDCMP
  452.  
  453. Win1Menus2:    cmp.w    #$00,d5
  454.         beq    DoResetCount
  455.         bra    Window1IDCMP
  456.  
  457. DoResetCount:    clr.w    RingCount
  458.         bsr    RefreshCount
  459.         bra    Window1IDCMP
  460.  
  461. DoLoad:        bsr    RemGads
  462.         bsr    Load
  463.         bsr    AddGads
  464.         move.l    #5,d1
  465.         lib    Dos,Delay
  466.         bra    ActivateGads2
  467.  
  468. VanillaKeys:    cmp.w    #$1b,d3
  469.         beq    ShutDown
  470.         cmp.w    #'s',d3            ;Lower case
  471.         beq    Save
  472.         cmp.w    #'q',d3
  473.         beq    ShutDown
  474.         cmp.w    #'c',d3
  475.         beq    ActivateGads1
  476.         cmp.w    #'i',d3
  477.         beq    ActivateGads2
  478.         cmp.w    #'S',d3            ;Upper case
  479.         beq    Save
  480.         cmp.w    #'Q',d3
  481.         beq    ShutDown
  482.         cmp.w    #'C',d3
  483.         beq    ActivateGads1
  484.         cmp.w    #'I',d3
  485.         beq    ActivateGads2
  486.         bra    Window1IDCMP
  487.  
  488. DoGads:        cmp.w    #1,$26(a5)
  489.         beq    ActivateGads2
  490.         cmp.w    #2,$26(a5)
  491.         beq    ActivateGads1
  492.         cmp.w    #10,$26(a5)
  493.         beq    Save
  494.         cmp.w    #20,$26(a5)
  495.         beq    ShutDown
  496.         bra    Window1IDCMP
  497.  
  498. ActivateGads1:    move.l    CmdStrGad1,a0
  499.         move.l    Window1,a1
  500.         sub.l    a2,a2
  501.         lib    Intuition,ActivateGadget
  502.         bra    Window1IDCMP
  503. ActivateGads2:    move.l    StartStrGad1,a0
  504.         move.l    Window1,a1
  505.         sub.l    a2,a2
  506.         lib    Intuition,ActivateGadget
  507.         bra    Window1IDCMP
  508.  
  509. ActGad:        move.l    StartStrGad1,a0
  510.         move.l    Window1,a1
  511.         sub.l    a2,a2
  512.         lib    Intuition,ActivateGadget
  513.         rts
  514.  
  515. Load:        lea.l    PrefsName,a0
  516.         move.l    a0,d1
  517.         move.l    #MODE_OLDFILE,d2
  518.         lib    Dos,Open
  519.         move.l    d0,PrefsFile
  520.         beq    Load_ERR1
  521.  
  522.         move.l    PrefsFile,d1
  523.         lea.l    Prefs,a0
  524.         move.l    a0,d2
  525.         move.l    #2,d3
  526.         lib    Dos,Read
  527.         cmp.l    #2,d0
  528.         bne    Load_ERR2
  529.  
  530.         cmp.w    #'RD',Prefs
  531.         bne    Load_ERR3
  532.  
  533.         move.l    PrefsFile,d1
  534.         add.l    #2,d2
  535.         move.l    #PrefsSize-2,d3
  536.         lib    Dos,Read
  537.         cmp.l    #PrefsSize-2,d0
  538.         bne    Load_ERR2
  539.  
  540. Load_OUT0.1:    move.l    PrefsFile,d1
  541.         lib    Dos,Close
  542.         clr.l    PrefsFile
  543.  
  544. Load_OUT:    bsr    SetModes
  545.         rts
  546.  
  547. Load_ERR1:    lea.l    File_ERRTxt1,a1
  548.         bsr    DoAutoRequest
  549.         bra    Load_OUT
  550.  
  551. Load_ERR2:    lea.l    File_ERRTxt2,a1
  552.         bsr    DoAutoRequest
  553.         bra    Load_OUT0.1
  554.  
  555. Load_ERR3:    lea.l    File_ERRTxt3,a1
  556.         bsr    DoAutoRequest
  557.         bra    Load_OUT0.1
  558.  
  559. Save:        bsr    CheckModes
  560.  
  561.         lea.l    PrefsName,a0
  562.         move.l    a0,d1
  563.         move.l    #MODE_NEWFILE,d2
  564.         lib    Dos,Open
  565.         move.l    d0,PrefsFile
  566.         beq    Save_ERR1
  567.  
  568.         move.w    #'RD',Prefs
  569.  
  570.         move.l    PrefsFile,d1
  571.         lea.l    Prefs,a0
  572.         move.l    a0,d2
  573.         move.l    #PrefsSize,d3
  574.         lib    Dos,Write
  575.         cmp.l    #PrefsSize,d0
  576.         bne    Save_ERR2
  577.  
  578. Save_OUT:    move.l    PrefsFile,d1
  579.         lib    Dos,Close
  580.         clr.l    PrefsFile
  581. Save_OUT1:    bra    ActivateGads2
  582.  
  583. Save_ERR1:    lea.l    File_ERRTxt1,a1
  584.         bsr    DoAutoRequest
  585.         bra    Save_OUT1
  586.  
  587. Save_ERR2:    lea.l    File_ERRTxt2,a1
  588.         bsr    DoAutoRequest
  589.         bra    Save_OUT
  590.  
  591. About:        bsr    SleepPointer
  592.         bsr    MenusOff
  593.         bsr    RemGads
  594.  
  595.         move.l    Window1,a0
  596.         lea.l    AboutTxt1,a1
  597.         move.l    #$00,a2        ;positive text
  598.         lea.l    OKTxt,a3    ;a bit the wrong way around but...
  599.         move.l    #$00,d0
  600.         move.l    #$00,d1
  601.         move.l    #320,d2
  602.         move.l    #$50,d3
  603.         lib    Intuition,AutoRequest
  604.         bsr    AddGads
  605.         bsr    MenusOn
  606.         bsr    NormalPointer
  607.         bra    Window1IDCMP
  608.  
  609. Break:        lea.l    BreakText1,a0
  610.         bsr    Printer
  611.         move.l    #CLOSEWINDOW,d2        ;fake closewindow...
  612.         move.l    #-1,d0
  613.         rts
  614.  
  615. TestRing:    tst.w    BufCount
  616.         bne    TestRing2
  617.         cmp.b    #'R',Buffer1
  618.         bne    TestRing4
  619. TestRing2:    lea.l    Buffer2,a0
  620.         add.w    BufCount,a0
  621.         move.b    Buffer1,(a0)
  622.         add.w    #1,BufCount
  623.         cmp.w    #4,BufCount
  624.         bne    TestRing4
  625.         clr.w    BufCount
  626.         cmp.l    #'RING',Buffer2
  627.         bne    TestRing4
  628. TestRing3:    bsr    ClearSer
  629.         bsr    Reader
  630.         clr.l    d0            ;indicate ring
  631.         rts
  632. TestRing4:    bsr    ClearSer        ;Abort possible prev. read
  633.         bsr    Reader            ;Set up new read
  634.         move.l    #-1,d0
  635.         rts
  636.  
  637. TestSOL:    cmp.b    #13,(a0)
  638.         bne    TestSOL1
  639.         add.l    #1,a0
  640. TestSOL1:    cmp.b    #10,(a0)
  641.         bne    TestSOL2
  642.         add.l    #1,a0
  643. TestSOL2:    rts
  644.  
  645. Ring:        add.w    #1,RingCount
  646.         bsr    CheckModes
  647.         tst.b    PrefsOnOff
  648.         beq    Window1IDCMP
  649.         bsr    STF
  650.         bsr    DB
  651.         bsr    Cmd
  652.         bsr    RefreshCount
  653.         bra    Window1IDCMP
  654.  
  655. SetModes:    move.l    OnOffGad1,a0
  656.         and.w    #~SELECTED,gg_Flags(a0)
  657.         move.l    STFGad1,a0
  658.         and.w    #~SELECTED,gg_Flags(a0)
  659.         move.l    DBGad1,a0
  660.         and.w    #~SELECTED,gg_Flags(a0)
  661.         move.l    CmdGad1,a0
  662.         and.w    #~SELECTED,gg_Flags(a0)
  663.  
  664.         move.l    OnOffGad1,a0
  665.         tst.b    PrefsOnOff
  666.         beq    SetModes1
  667.         or.w    #SELECTED,gg_Flags(a0)
  668. SetModes1:    move.l    STFGad1,a0
  669.         tst.b    PrefsSTF
  670.         beq    SetModes2
  671.         or.w    #SELECTED,gg_Flags(a0)
  672. SetModes2:    move.l    DBGad1,a0
  673.         tst.b    PrefsDB
  674.         beq    SetModes3
  675.         or.w    #SELECTED,gg_Flags(a0)
  676. SetModes3:    move.l    CmdGad1,a0
  677.         tst.b    PrefsCmd
  678.         beq    SetModes4
  679.         or.w    #SELECTED,gg_Flags(a0)
  680. SetModes4:    lea.l    CmdBuffer,a0
  681.         move.l    CmdStrGadBuf1,a1
  682.         move.l    #32,d0
  683.         lib    Exec,CopyMem
  684.  
  685.         lea.l    StartBuffer,a0        ;DEBUG!!!
  686.         move.l    StartStrGadBuf1,a1
  687.         move.l    #32,d0
  688.         lib    Exec,CopyMem
  689.  
  690.         tst.l    Window1
  691.         beq    SetModes5
  692.         move.l    Window1,a0
  693.         move.w    Alt1XPos,d0
  694.         move.w    Alt1YPos,d1
  695.         move.w    wd_Width(a0),d2
  696.         move.w    wd_Height(a0),d3
  697.         lib    Intuition,ChangeWindowBox
  698.         rts
  699. SetModes5:    move.l    Alt1XPos,NewWindow1
  700.         rts
  701.  
  702. CheckModes:    move.l    OnOffGad1,a0
  703.         move.w    gg_Flags(a0),d0
  704.         clr.b    PrefsOnOff
  705.         and.w    #SELECTED,d0
  706.         cmp.w    #SELECTED,d0
  707.         bne    CheckModes1
  708.         move.b    #$01,PrefsOnOff
  709.  
  710. CheckModes1:    move.l    STFGad1,a0
  711.         move.w    gg_Flags(a0),d0
  712.         clr.b    PrefsSTF
  713.         and.w    #SELECTED,d0
  714.         cmp.w    #SELECTED,d0
  715.         bne    CheckModes2
  716.         move.b    #$01,PrefsSTF
  717.  
  718. CheckModes2:    move.l    DBGad1,a0
  719.         move.w    gg_Flags(a0),d0
  720.         clr.b    PrefsDB
  721.         and.w    #SELECTED,d0
  722.         cmp.w    #SELECTED,d0
  723.         bne    CheckModes3
  724.         move.b    #$01,PrefsDB
  725.  
  726. CheckModes3:    move.l    CmdGad1,a0
  727.         move.w    gg_Flags(a0),d0
  728.         clr.b    PrefsCmd
  729.         and.w    #SELECTED,d0
  730.         cmp.w    #SELECTED,d0
  731.         bne    CheckModes4
  732.         move.b    #$01,PrefsCmd
  733. CheckModes4:    move.l    CmdStrGadBuf1,a0
  734.         lea.l    CmdBuffer,a1
  735.         move.l    #32,d0
  736.         lib    Exec,CopyMem
  737.  
  738.         move.l    StartStrGadBuf1,a0
  739.         lea.l    StartBuffer,a1
  740.         move.l    #32,d0
  741.         lib    Exec,CopyMem
  742.  
  743.         move.l    Window1,a0
  744.         move.l    wd_LeftEdge(a0),Alt1XY
  745.         rts
  746.  
  747. STF:        tst.b    PrefsSTF
  748.         beq    STF_OUT
  749.         move.l    Window1,a0
  750.         move.l    wd_Flags(a0),d0
  751.         and.l    #ZOOMED,d0
  752.         tst.l    Iconify
  753.         beq    STF1
  754.         cmp.l    #ZOOMED,d0
  755.         bne    STF2
  756.         bra    STF3
  757. STF1:        cmp.l    #ZOOMED,d0
  758.         bne    STF3
  759. STF2:        move.l    Window1,a0
  760.         lib    Intuition,ZipWindow
  761. STF3:        move.l    Window1,a0
  762.         move.l    $2e(a0),a0
  763.         lib    Intuition,ScreenToFront
  764.         move.l    Window1,a0
  765.         lib    Intuition,WindowToFront
  766.         move.l    Window1,a0
  767.         lib    Intuition,ActivateWindow
  768. STF_OUT:    rts
  769.  
  770. DB:        tst.b    PrefsDB
  771.         beq    DB_OUT
  772.         sub.l    a0,a0
  773.         lib    Intuition,DisplayBeep
  774. DB_OUT:        rts
  775.  
  776. Cmd:        tst.b    PrefsCmd
  777.         beq    Cmd_OUT
  778.         move.l    CmdStrGadBuf1,a0
  779.         tst.b    (a0)
  780.         beq    Cmd_OUT
  781.         move.l    a0,d1
  782.         clr.l    d2
  783.         clr.l    d3
  784.         lib    Dos,Execute
  785. Cmd_OUT:    rts
  786.  
  787. RemGads:    move.l    Window1,a0
  788.         lea.l    glist,a1
  789.         sub.l    a2,a2
  790.         move.l    #-1,d0
  791.         lib    Intuition,RemoveGList
  792.         rts
  793.  
  794. AddGads:    move.l    Window1,a0
  795.         lea.l    glist,a1
  796.         sub.l    a2,a2
  797.         move.l    #-1,d0
  798.         move.l    #-1,d1
  799.         lib    Intuition,AddGList
  800.  
  801.         lea.l    glist,a0
  802.         move.l    Window1,a1
  803.         sub.l    a2,a2
  804.         move.l    #-1,d0
  805.         lib    Intuition,RefreshGList
  806.  
  807.         move.l    Window1,a0
  808.         sub.l    a1,a1
  809.         lib    GadTools,GT_RefreshWindow
  810.         rts
  811.  
  812. RefreshCount:    lea.l    fstrl,a0        ;HEX->ASCII
  813.         lea.l    RingCount,a1        ;Number2Print
  814.         lea.l    PutChProc,a2
  815.         lea.l    CountText2,a3        ;Destination
  816.         lib    Exec,RawDoFmt
  817.  
  818.         move.l    Window1,a0
  819.         lea.l    CountText1,a1
  820.         lea.l    RDName1,a2
  821.         lib    Intuition,SetWindowTitles
  822.         rts
  823.  
  824. PutChProc:    tst.b    d0
  825.         beq    PutChProc_OUT
  826.         move.b    d0,(a3)+
  827. PutChProc_OUT:    rts
  828.  
  829. ClearSer:    clr.w    Buffer1
  830.         move.l    IORequest,a1
  831.         lib    Exec,CheckIO
  832.         tst.l    d0
  833.         bne    ClearSer_OUT
  834.         move.l    IORequest,a1
  835.         lib    Exec,WaitIO
  836.         move.l    IORequest,a1
  837.         ABORTIO
  838. ClearSer_OUT:    rts
  839.  
  840. Reader:        move.l    IORequest,a1
  841.         move.w    #CMD_READ,IO_COMMAND(a1)
  842.         move.l    #1,IO_LENGTH(a1)
  843.         lea.l    Buffer1,a0
  844.         move.l    a0,IO_DATA(a1)
  845.         lib    Exec,SendIO
  846.         rts
  847.  
  848. ResetSer:    lea.l    StartBuffer,a1
  849.         bsr    GetLength
  850.         move.l    d0,d5
  851.         move.l    IORequest,a1
  852.         move.w    #CMD_WRITE,IO_COMMAND(a1)
  853.         move.l    d5,IO_LENGTH(a1)
  854.         lea.l    StartBuffer,a0
  855.         move.l    a0,IO_DATA(a1)
  856.         lib    Exec,DoIO
  857.  
  858.         move.l    IORequest,a1
  859.         move.w    #CMD_WRITE,IO_COMMAND(a1)
  860.         move.l    #2,IO_LENGTH(a1)
  861.         lea.l    CRLFText1,a0
  862.         move.l    a0,IO_DATA(a1)
  863.         lib    Exec,DoIO
  864.         rts
  865.  
  866. ShutDown:    tst.w    SerOpen
  867.         beq    ShutDown9000
  868.         bsr    ClearSer
  869.         move.l    IORequest,a1
  870.         lib    Exec,CloseDevice
  871.  
  872. ShutDown9000:    move.l    IORequest,a0
  873.         lib    Exec,DeleteIORequest
  874.  
  875.         move.l    SRPort,a0
  876.         lib    Exec,DeleteMsgPort
  877.  
  878. ShutDown7000:    tst.l    PubScreen
  879.         beq    ShutDown6000
  880.         sub.l    a0,a0
  881.         move.l    PubScreen,a1
  882.         lib    Intuition,UnlockPubScreen
  883.  
  884. ShutDown6000:    bsr    CloseWin1
  885.         bsr    Clean2.0Magic
  886.  
  887. ShutDown5000:    move.l    PrefsFile,d1
  888.         beq    ShutDown4900
  889.         lib    Dos,Close
  890.  
  891. ShutDown4900:    move.l    NILFile,d1
  892.         beq    ShutDown4000
  893.         lib    Dos,Close
  894.  
  895. ShutDown4000:    move.l    RDArgs1,d1
  896.         beq    ShutDown3000
  897.         lib    Dos,FreeArgs
  898.  
  899. ShutDown3000:    tst.l    DiskObject
  900.         beq    ShutDown2000
  901.         move.l    DiskObject,a0
  902.         lib    Icon,FreeDiskObject
  903.  
  904. ShutDown2000:    move.l    OldLock,d1
  905.         beq    ShutDown1050
  906.         lib    Dos,CurrentDir
  907.  
  908. ShutDown1050:    move.l    WBMsg,d2
  909.         beq    ShutDown1000
  910.         lib    Exec,Forbid
  911.         move.l    d2,a1
  912.         flib    Exec,ReplyMsg
  913.  
  914. ShutDown1000:    closlib    Icon
  915.         closlib    Utility
  916.         closlib    Intuition
  917.         closlib    GadTools
  918.         closlib    Dos
  919.         pull    d2-d7/a2-a6
  920.         clr.l    d0
  921.         rts
  922.  
  923. ;CheckIDCMP gets messages from serial.device, keyboard (CTRL_C) and Intuition.
  924. ;Give it the window structure in a0
  925.  
  926. CheckIDCMP:    move.l    $56(a0),a2        ;Get window's port
  927.         clr.l    d1            ;Set signals for
  928.         clr.l    d0
  929.         move.b    $0f(a2),d1        ;IntuiMessages,
  930.         bset.l    d1,d0
  931.         move.l    SRPort,a1        ;serial.device
  932.         move.b    MP_SIGBIT(a1),d1
  933.         bset.l    d1,d0
  934.         bset.l    #SIGBREAKB_CTRL_C,d0    ;and CTRL_C
  935.         lib    Exec,Wait
  936.  
  937.         cmp.l    #SIGBREAKF_CTRL_C,d0    ;If CTRL_C
  938.         beq    Break            ;go break
  939.         move.b    $0f(a2),d1        ;If not IDCMP
  940.         btst    d1,d0            ;go test for ring
  941.         beq    TestRing
  942.  
  943. C2GetMsg1:    move.l    a2,a0    
  944.         lib    GadTools,GT_GetIMsg
  945.         tst.l    d0
  946.         beq    C2GetMsg2
  947.     
  948.         move.l    d0,a1 
  949.         move.l    $14(a1),d2        ;answers with Class in d2,
  950.         move.w    $18(a1),d3        ;Code in d3 and
  951.         move.w    $1a(a1),a4        ;Qualifier in a4
  952.         move.l    $1c(a1),a5        ;IAddress in a5
  953.         lib    GadTools,GT_ReplyIMsg
  954.         bra    C2GetMsg1
  955. C2GetMsg2:    move.l    #-1,d0
  956.         rts
  957.  
  958. ;Newer MenuNull subroutine
  959.  
  960. MenuNull:    move.w    d3,d0
  961.         and.w    #$1f,d0
  962.         move.w    d0,d6
  963.         move.w    d3,d0
  964.         lsr.w    #5,d0
  965.         move.w    d0,d1
  966.         and.w    #$3f,d0
  967.         move.w    d0,d5
  968.         lsr.w    #6,d1
  969.         move.w    d1,d4
  970.         rts
  971.  
  972. SleepPointer:    move.l    Window1,a0
  973.         lea.l    ClockPointer1,a1
  974.         move.l    #16,d0
  975.         move.l    #16,d1            ;WHAT-THE-HECK IS THIS FOR?
  976.         move.l    #-6,d2
  977.         move.l    #0,d3
  978.         lib    Intuition,SetPointer
  979.         rts
  980.  
  981. NormalPointer:    move.l    Window1,a0
  982.         lib    Intuition,ClearPointer
  983.         rts
  984.  
  985. MenusOn:    move.l    Window1,a0
  986.         move.l    mlist,a1
  987.         lib    Intuition,SetMenuStrip
  988.         rts
  989.  
  990. MenusOff:    move.l    Window1,a0
  991.         lib    Intuition,ClearMenuStrip
  992.         rts
  993.  
  994. ;Lock PublicScreen
  995.  
  996. LockPubScr:    sub.l    a0,a0
  997.         lib    Intuition,LockPubScreen
  998.         move.l    d0,PubScreen
  999.         beq    LockPubScr_OUT
  1000.  
  1001. ;Get some sizes
  1002.  
  1003.         move.l    PubScreen,a0
  1004.         move.b    sc_BarHeight(a0),d0
  1005.         add.b    #1,d0
  1006.         move.b    d0,BHeight+1
  1007.         move.w    BHeight,d5
  1008.         add.w    d5,SmallYSize
  1009.         add.w    d5,WinYSize
  1010. LockPubScr_OUT:    rts
  1011.  
  1012. ;Open Window
  1013.  
  1014. OpenWin1:    tst.l    Iconify
  1015.         beq    OpenWin1.01
  1016.         lea.l    NewWindow1,a0
  1017.         and.l    #~ACTIVATE,nw_Flags(a0)
  1018.         move.l    NewWindow1,ZoomXY
  1019.         move.l    NewWindow1+4,ZoomXY+4
  1020.         move.l    Alt1XY,nw_LeftEdge(a0)
  1021.         move.w    #160,nw_Width(a0)
  1022.         move.w    BHeight,nw_Height(a0)
  1023. OpenWin1.01:    lea.l    NewWindow1,a0
  1024.         lea.l    Win1TagList,a1
  1025.         lib    Intuition,OpenWindowTagList
  1026.         move.l    d0,Window1
  1027.         beq    OpenWin1_ERR1
  1028.         bsr    AddGads
  1029.         bsr    RefreshCount
  1030. OpenWin1.1:    move.l    Window1,a0
  1031.         move.l    mlist,a1
  1032.         lib    Intuition,SetMenuStrip
  1033.         bsr    ActGad
  1034.         move.l    #-1,d0
  1035.         rts
  1036. OpenWin1_ERR1:    clr.l    d0
  1037.         rts        
  1038.  
  1039. CloseWin1:    tst.l    Window1
  1040.         beq    CloseWin1_OUT
  1041.         bsr    RemGads            ;Not needed?
  1042. CloseWin1.1:    move.l    Window1,a0
  1043.         lib    Intuition,ClearMenuStrip
  1044.         move.l    Window1,a3
  1045.         bsr    ClearMSGs
  1046. CloseWin1_OUT:    clr.l    Window1
  1047.         rts
  1048.  
  1049. ;ClearMsgs subroutine
  1050. ;a3 = window structure (Don't even try to give it!)
  1051.  
  1052. ClearMSGs:    lib    Exec,Forbid
  1053.         move.l    Window1,a3
  1054.         move.l    $56(a3),a2
  1055. ClearMsg1:    move.l    a2,a0    
  1056.         lib    GadTools,GT_GetIMsg
  1057.         tst.l    d0
  1058.         beq    ClearMsg2
  1059.         move.l    d0,a1 
  1060.         flib    GadTools,GT_ReplyIMsg
  1061.         bra    ClearMsg1
  1062. ClearMsg2:    move.l    a3,a0
  1063.         lib    Intuition,CloseWindow
  1064.         lib    Exec,Permit
  1065. ClearMsg3:    rts
  1066.  
  1067. ;Get length of text in given address
  1068. ;
  1069. ;Input a1 = Address of null terminated text string
  1070. ;
  1071. ;Result d0 = Length
  1072.  
  1073. GetLength:    clr.l    d0
  1074.         cmp.l    #$00,a1        ;fixes enforcer hit
  1075.         beq    GetLength_OUT
  1076. GetLength2:    add.l    #1,d0
  1077.         tst.b    (a1)+
  1078.         bne    GetLength2
  1079.         sub.l    #1,d0        ;don't include NULL
  1080. GetLength_OUT:    rts
  1081.  
  1082. ConvASCII:    clr.l    d0
  1083.         clr.l    d1
  1084.         cmp.b    #' ',(a0)
  1085.         bne    ConvASCII2
  1086.         add.l    #1,a0
  1087. ConvASCII2:    move.b    (a0),d1
  1088.         cmp.b    #'0',d1
  1089.         bcs    ConvASCII_OUT
  1090.         cmp.b    #'9',d1
  1091.         bhi    ConvASCII_OUT
  1092.         sub.b    #'0',d1
  1093.         push    d1/a0
  1094. ;        mulu.w    #10,d0
  1095.         move.l    #10,d1
  1096.         lib    Utility,UMult32
  1097.         pull    d1/a0
  1098.         add.l    d1,d0
  1099.         add.l    #1,a0
  1100.         bra    ConvASCII2
  1101. ConvASCII_OUT:    rts
  1102.  
  1103. Clean2.0Magic:    tst.b    GadMagic
  1104.         beq    Clean2.0M2
  1105.         move.l    glist,a0
  1106.         lib    GadTools,FreeGadgets
  1107.  
  1108. Clean2.0M2:    tst.b    MenuMagic
  1109.         beq    Clean2.0M3
  1110.         move.l    mlist,a0
  1111.         lib    GadTools,FreeMenus
  1112.  
  1113. Clean2.0M3:    tst.l    vi
  1114.         beq    Clean2.0_OUT
  1115.         move.l    vi,a0
  1116.         lib    GadTools,FreeVisualInfo
  1117.  
  1118. Clean2.0_OUT:    rts
  1119.  
  1120. ;Error etc. messages
  1121.  
  1122. NoDos:        pull    d2-d7/a2-a6
  1123.         move.l    #RETURN_FAIL,d0
  1124.         rts
  1125.  
  1126. NoInt:        lea.l    NoIntText1,a0
  1127.         bsr    Printer
  1128.         bra    ShutDown
  1129.  
  1130. NoRDArgs:    lib    Dos,IoErr
  1131.         move.l    d0,d1
  1132.         clr.l    d2
  1133.         lib    Dos,PrintFault
  1134.         bra    ShutDown
  1135.  
  1136. NoUtility:    add.l    #8,sp
  1137.         lea.l    NoUtilityText1,a0
  1138.         bsr    Printer
  1139.         bra    ShutDown
  1140.  
  1141. NoGadTools:    lea.l    NoGTText1,a0
  1142.         bsr    Printer
  1143.         bra    ShutDown
  1144.  
  1145. NoNIL:        lea.l    NoNILText1,a0
  1146.         bsr    Printer
  1147.         bra    ShutDown
  1148.  
  1149. NoIcon:        lea.l    NoIconText1,a0
  1150.         bsr    Printer
  1151.         bra    ShutDown
  1152.  
  1153. NoMsgPort:    lea.l    NoMsgPortText1,a0
  1154.         bsr    Printer
  1155.         bra    ShutDown
  1156.  
  1157. NoIOReq:    lea.l    NoIOReqText1,a0
  1158.         bsr    Printer
  1159.         bra    ShutDown
  1160.  
  1161. NoSerial:    lea.l    NoSerialText1,a0
  1162.         bsr    Printer
  1163.         move.l    SerName,a0
  1164.         bsr    Printer
  1165.         lea.l    NoSerialText2,a0
  1166.         bsr    Printer
  1167.         bra    ShutDown
  1168.  
  1169. NoSetSer:    lea.l    NoSetSerText1,a0
  1170.         bsr    Printer
  1171.         rts
  1172.  
  1173. NoPubScreen:    lea.l    NoPubScrText1,a0
  1174.         bsr    Printer
  1175.         bra    ShutDown
  1176.  
  1177. NoWindow1:    lea.l    NoWindowText1,a0
  1178.         bsr    Printer
  1179.         bra    ShutDown
  1180.  
  1181. NoContextGad:    lea.l    NoContextText1,a0
  1182.         bsr    Printer
  1183.         bra    ShutDown
  1184.  
  1185. NoMenus:    lea.l    NoMenusText1,a0
  1186.         bsr    Printer
  1187.         bra    ShutDown
  1188.  
  1189. Printer:    printa    a0,_stdout
  1190.         rts
  1191.  
  1192. DoAutoRequest:    move.l    #$00,a2        ;positive text
  1193.         lea.l    OKTxt(pc),a3    ;a bit the wrong way around but...
  1194.         move.l    #$00,d0
  1195.         move.l    #$00,d1
  1196.         move.l    #$00,d2
  1197.         move.l    #$00,d3
  1198.         sub.l    a0,a0
  1199.         lib    Intuition,AutoRequest
  1200.         rts
  1201.  
  1202. ;Structures
  1203.  
  1204. ;GadTools stuff
  1205.  
  1206. vi:        dc.l    0        ;Visual Info
  1207. mlist:        dc.l    0
  1208. ContextGad:    dc.l    0
  1209. GadMagic:    dc.b    0
  1210. MenuMagic:    dc.b    0
  1211.  
  1212. ;Gadgets
  1213.  
  1214. OnOffGad1:    dc.l    0
  1215. STFGad1:    dc.l    0
  1216. DBGad1:        dc.l    0
  1217. CmdGad1:    dc.l    0
  1218. SaveGad1:    dc.l    0
  1219. QuitGad1:    dc.l    0
  1220. CmdStrGad1:    dc.l    0
  1221. CmdStrGadBuf1:    dc.l    0        ;Only a pointer!
  1222. StartStrGad1:    dc.l    0
  1223. StartStrGadBuf1: dc.l    0        ;Only a pointer!
  1224.  
  1225. ;display stuff
  1226.  
  1227. PubScreen:    dc.l    0
  1228. Window1:    dc.l    0
  1229. BHeight:    dc.w    0
  1230.  
  1231. ;lib stuff
  1232.  
  1233.         libnames
  1234.  
  1235. ;Other stuff, part I
  1236.  
  1237. OurTask:    dc.l    0
  1238. RDArgs1:    dc.l    0
  1239. SRPort:        dc.l    0
  1240. IORequest:    dc.l    0
  1241. PrefsFile:    dc.l    0
  1242. NILFile:    dc.l    0
  1243. _stdout:    dc.l    0
  1244. WBMsg:        dc.l    0
  1245. DiskObject:    dc.l    0
  1246. OldLock:    dc.l    0
  1247. BufCount:    dc.w    0
  1248. RingCount:    dc.w    0
  1249.  
  1250. ;Options
  1251.  
  1252. CLArray1:
  1253. Iconify:    dc.l    0        ;(1 = Yes, please)
  1254. SerName:    dc.l    SerName2    ;A pointer!
  1255. UnitPointer:    dc.l    0
  1256. SpeedPointer:    dc.l    0
  1257.  
  1258. ;Serial device stuff
  1259.  
  1260. SerUnit:    dc.l    0
  1261. Speed:        dc.l    0
  1262. SerOpen:    dc.w    0
  1263.  
  1264. ;Strings, error
  1265.  
  1266. BreakText1:    dc.b    "***Break: RingDetect",13,10,0
  1267. NoIntText1:    dc.b    "ERROR: Couldn't open intuition.library",13,10,0
  1268. NoUtilityText1:    dc.b    "ERROR: Couldn't open utility.library",13,10,0
  1269. NoGTText1:    dc.b    "ERROR: Couldn't open gadtools.library!",13,10,0
  1270. NoNILText1:    dc.b    "ERROR: Couldn't open device NIL:!",13,10,0
  1271. NoIconText1:    dc.b    "ERROR: Couldn't open icon.library!",13,10,0
  1272. NoMsgPortText1:    dc.b    "ERROR: Couldn't get message port!",13,10,0
  1273. NoIOReqText1:    dc.b    "ERROR: Couldn't get SerialIOReq!",13,10,0
  1274. NoSetSerText1:    dc.b    "ERROR: Couldn't set parameters for device!",13,10,0
  1275. NoSerialText1:    dc.b    "ERROR: Couldn't open ",0
  1276. SerName2:    dc.b    "serial.device",0
  1277. NoSerialText2:    dc.b    13,10,0
  1278. NoPubScrText1:    dc.b    "ERROR: Couldn't lock PublicScreen",13,10,0
  1279. NoContextText1:    dc.b    "ERROR: Couldn't create context gadget",13,10,0
  1280. NoMenusText1:    dc.b    "ERROR: Couldn't allocate menus structure",13,10,0
  1281. NoWindowText1:    dc.b    "ERROR: Couldn't open Window",13,10,0
  1282. File_ERRText1:    dc.b    "Couldn't open file!",0
  1283. File_ERRText2:    dc.b    "File error!",0
  1284. File_ERRText3:    dc.b    "Incorrect file type!",0
  1285.  
  1286. ;Strings, names
  1287.  
  1288. CLTemplate1:    dc.b    "I=ICONIFY/S,DEV=DEVICE/K,UNIT/N/K,SPEED/N/K",0
  1289. RDVersion:    dc.b    "$VER: RingDetect "
  1290.         PROGVERSION
  1291.         dc.b    " (c) Copyright Tomi Blinnikka 1993",0
  1292. SRPortName:    dc.b    "RingDetect_port",0
  1293. OKText1:    dc.b    "OK",0
  1294. PrefsName:    dc.b    "ENVARC:RingDetect.PREFS",0
  1295. NILName:    dc.b    "NIL:",0
  1296. DEVICEText1:    dc.b    "DEVICE",0
  1297. UNITText1:    dc.b    "UNIT",0
  1298. SPEEDText1:    dc.b    "SPEED",0
  1299. ICONIFYText1:    dc.b    "ICONIFY",0
  1300. YESText1:    dc.b    "YES",0
  1301. AboutText1:    dc.b    "Name   : RingDetect",0
  1302. AboutText2:    dc.b    "Version: "
  1303.         PROGVERSION
  1304.         dc.b    0
  1305. AboutText3:    dc.b    "Author : Tomi Blinnikka",0
  1306. AboutText4:    dc.b    "   (c) Copyright 1993",0
  1307. RDName1:    dc.b    "RingDetect",0
  1308. CountText1:    dc.b    "RD: "
  1309. CountText2:    dc.b    "    0 ",0
  1310. fstrl:        dc.b    "%5.d",0
  1311. CRLFText1:    dc.b    13,10,0
  1312.         ds.l    0
  1313.  
  1314. ;New screen & new window structures
  1315.  
  1316. NewWindow1:    dc.w    200,31            ;X,Y POS
  1317.         dc.w    310            ;WIDTH
  1318. WinYSize:    dc.w    72            ;HEIGHT
  1319.         dc.b    0,1            ;PENS
  1320.         dc.l    CLOSEWINDOW!VANILLAKEY!MENUPICK!GADGETUP    ;IDCMP FLAGS
  1321.         dc.l    NOCAREREFRESH!WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE!ACTIVATE    ;FLAGS
  1322.         dc.l    0,0            ;GADGETS, CHECKMARK
  1323.         dc.l    CountText1        ;TITLE
  1324.         dc.l    0            ;SCREEN ADDRESS
  1325.         dc.l    0            ;BITMAP            
  1326.         dc.w    0,0,0,0            ;MIN/MAX SIZE
  1327.         dc.w    PUBLICSCREEN        ;TYPE
  1328.  
  1329. Win1TagList:    dc.l    WA_AutoAdjust,TRUE
  1330.         dc.l    WA_Zoom,ZoomXY
  1331.         dc.l    TAG_DONE,0
  1332.  
  1333. ZoomXY:
  1334. SmallXPos:    dc.w    10
  1335. SmallYPos:    dc.w    21
  1336. SmallXSize:    dc.w    160
  1337. SmallYSize:    dc.w    0
  1338.  
  1339. ;Fonts
  1340.  
  1341. Topaz:        dc.l    TopazName
  1342.         dc.w    8
  1343.         dc.b    0
  1344.         dc.b    0
  1345. TopazName:    dc.b    "topaz.font",0
  1346.         ds.l    0
  1347.  
  1348.  
  1349. ;ITextStructures
  1350.  
  1351. OKTxt:        dc.b    1,2            ;PENS
  1352.         dc.w    0            ;MODE
  1353.         dc.w    6,3            ;LEFT+TOPEDGE
  1354.         dc.l    0            ;FONT
  1355.         dc.l    OKText1            ;TEXT
  1356.         dc.l    0            ;NEXTTEXT
  1357.  
  1358. File_ERRTxt1:    dc.b    1,2            ;PENS
  1359.         dc.w    0            ;MODE
  1360.         dc.w    10,10            ;LEFT+TOPEDGE
  1361.         dc.l    0            ;FONT
  1362.         dc.l    File_ERRText1        ;TEXT
  1363.         dc.l    0            ;NEXTTEXT
  1364.  
  1365. File_ERRTxt2:    dc.b    1,2            ;PENS
  1366.         dc.w    0            ;MODE
  1367.         dc.w    10,10            ;LEFT+TOPEDGE
  1368.         dc.l    0            ;FONT
  1369.         dc.l    File_ERRText2        ;TEXT
  1370.         dc.l    0            ;NEXTTEXT
  1371.  
  1372. File_ERRTxt3:    dc.b    1,2            ;PENS
  1373.         dc.w    0            ;MODE
  1374.         dc.w    10,10            ;LEFT+TOPEDGE
  1375.         dc.l    0            ;FONT
  1376.         dc.l    File_ERRText3        ;TEXT
  1377.         dc.l    0            ;NEXTTEXT
  1378.  
  1379. AboutTxt1:    dc.b    1,2            ;PENS
  1380.         dc.w    0            ;MODE
  1381.         dc.w    0,0            ;LEFT+TOPEDGE
  1382.         dc.l    Topaz            ;FONT
  1383.         dc.l    AboutText1        ;TEXT
  1384.         dc.l    AboutTxt2        ;NEXTTEXT
  1385.  
  1386. AboutTxt2:    dc.b    1,2            ;PENS
  1387.         dc.w    0            ;MODE
  1388.         dc.w    0,10            ;LEFT+TOPEDGE
  1389.         dc.l    Topaz            ;FONT
  1390.         dc.l    AboutText2        ;TEXT
  1391.         dc.l    AboutTxt3        ;NEXTTEXT
  1392.  
  1393. AboutTxt3:    dc.b    1,2            ;PENS
  1394.         dc.w    0            ;MODE
  1395.         dc.w    0,20            ;LEFT+TOPEDGE
  1396.         dc.l    Topaz            ;FONT
  1397.         dc.l    AboutText3        ;TEXT
  1398.         dc.l    AboutTxt4        ;NEXTTEXT
  1399.  
  1400. AboutTxt4:    dc.b    1,2            ;PENS
  1401.         dc.w    0            ;MODE
  1402.         dc.w    0,30            ;LEFT+TOPEDGE
  1403.         dc.l    Topaz            ;FONT
  1404.         dc.l    AboutText4        ;TEXT
  1405.         dc.l    0 ;AboutTxt5        ;NEXTTEXT
  1406.  
  1407. ;Gadgets
  1408.  
  1409. OnOffGadText1:    dc.b    "On/Off",0
  1410. STFGadText1:    dc.b    "ScreenToFront",0
  1411. DBGadText1:    dc.b    "DisplayBeep",0
  1412. SaveGadText1:    dc.b    "_Save",0
  1413. QuitGadText1:    dc.b    "_Quit",0
  1414. CmdGadText2:    dc.b    "Command",0
  1415. CmdGadText1:    dc.b    "_Command",0
  1416. StartGadText1:    dc.b    "_Init string",0
  1417.         ds.l    0
  1418.  
  1419. glist:        dcb.b    gg_SIZEOF,0
  1420.  
  1421. NGOnOffGad1:    dc.w    10        ;gng_LeftEdge
  1422.         dc.w    RingTop        ;gng_TopEdge
  1423.         dc.w    0        ;gng_Width
  1424.         dc.w    12        ;gng_Height
  1425.         dc.l    OnOffGadText1    ;gng_GadgetText
  1426.         dc.l    Topaz        ;gng_TextAttr
  1427.         dc.w    0        ;gng_GadgetID
  1428.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1429.         dc.l    0        ;gng_VisualInfo
  1430.         dc.l    0        ;gng_UserData
  1431.  
  1432. NGSTFGad1:    dc.w    10        ;gng_LeftEdge
  1433.         dc.w    RingTop+13    ;gng_TopEdge
  1434.         dc.w    0        ;gng_Width
  1435.         dc.w    12        ;gng_Height
  1436.         dc.l    STFGadText1    ;gng_GadgetText
  1437.         dc.l    Topaz        ;gng_TextAttr
  1438.         dc.w    0        ;gng_GadgetID
  1439.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1440.         dc.l    0        ;gng_VisualInfo
  1441.         dc.l    0        ;gng_UserData
  1442.  
  1443. NGDBGad1:    dc.w    10        ;gng_LeftEdge
  1444.         dc.w    RingTop+26    ;gng_TopEdge
  1445.         dc.w    0        ;gng_Width
  1446.         dc.w    12        ;gng_Height
  1447.         dc.l    DBGadText1    ;gng_GadgetText
  1448.         dc.l    Topaz        ;gng_TextAttr
  1449.         dc.w    0        ;gng_GadgetID
  1450.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1451.         dc.l    0        ;gng_VisualInfo
  1452.         dc.l    0        ;gng_UserData
  1453.  
  1454. NGCmdGad1:    dc.w    10        ;gng_LeftEdge
  1455.         dc.w    RingTop+39    ;gng_TopEdge
  1456.         dc.w    0        ;gng_Width
  1457.         dc.w    12        ;gng_Height
  1458.         dc.l    CmdGadText2    ;gng_GadgetText
  1459.         dc.l    Topaz        ;gng_TextAttr
  1460.         dc.w    0        ;gng_GadgetID
  1461.         dc.l    PLACETEXT_RIGHT    ;gng_Flags
  1462.         dc.l    0        ;gng_VisualInfo
  1463.         dc.l    0        ;gng_UserData
  1464.  
  1465. NGSaveGad:    dc.w    10        ;gng_LeftEdge
  1466.         dc.w    OptionTop    ;gng_TopEdge
  1467.         dc.w    60        ;gng_Width
  1468.         dc.w    12        ;gng_Height
  1469.         dc.l    SaveGadText1    ;gng_GadgetText
  1470.         dc.l    Topaz        ;gng_TextAttr
  1471.         dc.w    10        ;gng_GadgetID
  1472.         dc.l    PLACETEXT_IN    ;gng_Flags
  1473.         dc.l    0        ;gng_VisualInfo
  1474.         dc.l    0        ;gng_UserData
  1475.  
  1476. NGQuitGad:    dc.w    -70        ;gng_LeftEdge
  1477.         dc.w    OptionTop    ;gng_TopEdge
  1478.         dc.w    60        ;gng_Width
  1479.         dc.w    12        ;gng_Height
  1480.         dc.l    QuitGadText1    ;gng_GadgetText
  1481.         dc.l    Topaz        ;gng_TextAttr
  1482.         dc.w    20        ;gng_GadgetID
  1483.         dc.l    PLACETEXT_IN    ;gng_Flags
  1484.         dc.l    0        ;gng_VisualInfo
  1485.         dc.l    0        ;gng_UserData
  1486.  
  1487. NGCmdStrGad1:    dc.w    160        ;gng_LeftEdge
  1488.         dc.w    RingTop+27    ;gng_TopEdge
  1489.         dc.w    128        ;gng_Width
  1490.         dc.w    12        ;gng_Height
  1491.         dc.l    CmdGadText1    ;gng_GadgetText
  1492.         dc.l    Topaz        ;gng_TextAttr
  1493.         dc.w    1        ;gng_GadgetID
  1494.         dc.l    PLACETEXT_BELOW    ;gng_Flags
  1495.         dc.l    0        ;gng_VisualInfo
  1496.         dc.l    0        ;gng_UserData
  1497.  
  1498. NGStartGad1:    dc.w    174        ;gng_LeftEdge
  1499.         dc.w    RingTop        ;gng_TopEdge
  1500.         dc.w    100        ;gng_Width
  1501.         dc.w    12        ;gng_Height
  1502.         dc.l    StartGadText1    ;gng_GadgetText
  1503.         dc.l    Topaz        ;gng_TextAttr
  1504.         dc.w    2        ;gng_GadgetID
  1505.         dc.l    PLACETEXT_BELOW    ;gng_Flags
  1506.         dc.l    0        ;gng_VisualInfo
  1507.         dc.l    0        ;gng_UserData
  1508.  
  1509. ;Gadget TagLists
  1510.  
  1511. StartGadTagList: dc.l    GTST_String,StartBuffer
  1512.         dc.l    GT_Underscore,'_'
  1513.         dc.l    GTST_MaxChars,20
  1514.         dc.l    TAG_DONE,0
  1515.  
  1516. CmdStrGadTagList: dc.l    GTST_String,CmdBuffer
  1517.         dc.l    GT_Underscore,'_'
  1518.         dc.l    GTST_MaxChars,32
  1519.         dc.l    TAG_DONE,0
  1520.  
  1521. GadTagList:    dc.l    GT_Underscore,'_'
  1522.         dc.l    TAG_DONE,0
  1523. ;Menus
  1524.  
  1525. Menu1Name:    dc.b    "Project",0
  1526. LoadMenuText1:    dc.b    "Load",0
  1527. LoadCommKey:    dc.b    "L",0
  1528. SaveMenuText1:    dc.b    "Save",0
  1529. SaveCommKey:    dc.b    "S",0
  1530. AboutMenuText1:    dc.b    "About...",0
  1531. AboutCommKey:    dc.b    "?",0
  1532. QuitMenuText1:    dc.b    "Quit",0
  1533. QuitCommKey:    dc.b    "Q",0
  1534. Menu2Name:    dc.b    "Counter",0
  1535. ResetMenuText1:    dc.b    "Reset",0
  1536. ResetCommKey:    dc.b    "R",0
  1537.         ds.l    0
  1538.  
  1539. MNProjectMenu1:    dc.b    NM_TITLE        ;gnm_Type
  1540.         dc.b    0            ;gnm_Pad
  1541.         dc.l    Menu1Name        ;gnm_Label
  1542.         dc.l    0            ;gnm_CommKey
  1543.         dc.w    0            ;gnm_Flags
  1544.         dc.l    0            ;gnm_MutualExclude
  1545.         dc.l    0            ;gnm_UserData
  1546.  
  1547. MNLoad1:    dc.b    NM_ITEM            ;gnm_Type
  1548.         dc.b    0            ;gnm_Pad
  1549.         dc.l    LoadMenuText1        ;gnm_Label
  1550.         dc.l    LoadCommKey        ;gnm_CommKey
  1551.         dc.w    0            ;gnm_Flags
  1552.         dc.l    0            ;gnm_MutualExclude
  1553.         dc.l    0            ;gnm_UserData
  1554.  
  1555. MNSave1:    dc.b    NM_ITEM            ;gnm_Type
  1556.         dc.b    0            ;gnm_Pad
  1557.         dc.l    SaveMenuText1        ;gnm_Label
  1558.         dc.l    SaveCommKey        ;gnm_CommKey
  1559.         dc.w    0            ;gnm_Flags
  1560.         dc.l    0            ;gnm_MutualExclude
  1561.         dc.l    0            ;gnm_UserData
  1562.  
  1563. MNAbout1:    dc.b    NM_ITEM            ;gnm_Type
  1564.         dc.b    0            ;gnm_Pad
  1565.         dc.l    AboutMenuText1        ;gnm_Label
  1566.         dc.l    AboutCommKey        ;gnm_CommKey
  1567.         dc.w    0            ;gnm_Flags
  1568.         dc.l    0            ;gnm_MutualExclude
  1569.         dc.l    0            ;gnm_UserData
  1570.  
  1571. MNP1SepMenu1:    dc.b    NM_ITEM            ;gnm_Type
  1572.         dc.b    0            ;gnm_Pad
  1573.         dc.l    NM_BARLABEL        ;gnm_Label
  1574.         dc.l    0            ;gnm_CommKey
  1575.         dc.w    0            ;gnm_Flags
  1576.         dc.l    0            ;gnm_MutualExclude
  1577.         dc.l    0            ;gnm_UserData
  1578.  
  1579. MNQuit1:    dc.b    NM_ITEM            ;gnm_Type
  1580.         dc.b    0            ;gnm_Pad
  1581.         dc.l    QuitMenuText1        ;gnm_Label
  1582.         dc.l    QuitCommKey        ;gnm_CommKey
  1583.         dc.w    0            ;gnm_Flags
  1584.         dc.l    0            ;gnm_MutualExclude
  1585.         dc.l    0            ;gnm_UserData
  1586.  
  1587. MNCounterMenu1:    dc.b    NM_TITLE        ;gnm_Type
  1588.         dc.b    0            ;gnm_Pad
  1589.         dc.l    Menu2Name        ;gnm_Label
  1590.         dc.l    0            ;gnm_CommKey
  1591.         dc.w    0            ;gnm_Flags
  1592.         dc.l    0            ;gnm_MutualExclude
  1593.         dc.l    0            ;gnm_UserData
  1594.  
  1595. MNReset1:    dc.b    NM_ITEM            ;gnm_Type
  1596.         dc.b    0            ;gnm_Pad
  1597.         dc.l    ResetMenuText1        ;gnm_Label
  1598.         dc.l    ResetCommKey        ;gnm_CommKey
  1599.         dc.w    0            ;gnm_Flags
  1600.         dc.l    0            ;gnm_MutualExclude
  1601.         dc.l    0            ;gnm_UserData
  1602.  
  1603.         dc.w    0            ;NM_END?
  1604.  
  1605. ;Menu TagList(s)
  1606.  
  1607. MenuTagList:    dc.l    GTMN_Menu,MNProjectMenu1
  1608.         dc.l    TAG_DONE,0
  1609.  
  1610. ;Buffers
  1611.  
  1612. Buffer1:    dcb.b    2,0
  1613. Buffer2:    dcb.b    4,0
  1614.  
  1615. PREFS_START:
  1616.  
  1617. Prefs:        dc.b    "RD"
  1618. PrefsOnOff:    dc.b    1
  1619. PrefsSTF:    dc.b    1
  1620. PrefsDB:    dc.b    1
  1621. PrefsCmd:    dc.b    0
  1622.  
  1623. Alt1XY:
  1624. Alt1XPos:    dc.w    200
  1625. Alt1YPos:    dc.w    31
  1626.  
  1627. CmdBuffer:    dcb.b    34,0
  1628. StartBuffer:    dc.b    "ATZ"
  1629.         dcb.b    22-3,0
  1630.  
  1631. PREFS_END:    dc.l    0,0
  1632.  
  1633. PrefsSize:    EQU    (PREFS_END-PREFS_START)
  1634.  
  1635.         Section    RD,DATA,CHIP
  1636.  
  1637.         ds.w    0
  1638.  
  1639. ClockPointer1:    dc.w    $0000,$0000
  1640.         dc.w    $0400,$07C0,$0000,$07C0,$0100,$0380,$0000,$07E0
  1641.         dc.w    $07C0,$1FF8,$1FF0,$3FEC,$3FF8,$7FDE,$3FF8,$7FBE
  1642.         dc.w    $7FFC,$FF7F,$7EFC,$FFFF,$7FFC,$FFFF,$3FF8,$7FFE
  1643.         dc.w    $3FF8,$7FFE,$1FF0,$3FFC,$07C0,$1FF8,$0000,$07E0
  1644.         dc.w    $0000,$0000
  1645.  
  1646.         end
  1647.  
  1648.